/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package managers;

import business.Articulo;
import business.Estructura;
import business.Talla;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import util.Table;

/**
 *
 * @author Desarrollo
 */
public class MngArticulos extends Manager {

    public MngArticulos() {

    }

    public String getNextID() {
        String sql, id = null;

        sql = "SELECT IFNULL(fillZeros(MAX(codigo) + 1, 6), '000001') FROM articulos";
        System.out.println("getNextID: " + sql);
        try {
            rst = stmt.executeQuery(sql);
            if (rst.next()) id = rst.getString(1);
        } catch (SQLException ex) {
            Logger.getLogger(MngArticulos.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return id;
    }

    public boolean saveArticulo(String codigo, int marca, int tipoPrenda, int modelo, int tipoTela, int genero,
                                String grupoTallas, String codigoAlterno, String descripcion, float precioMayor6,
                                float precioMayor3, float precioMenor, String foto) {

        String call = "call spc_saveArticulo('"+codigo+"', "+marca+","+tipoPrenda+","+modelo+","+tipoTela+","+genero+","+
                                             "'"+grupoTallas+"','"+codigoAlterno+"','"+descripcion+"',"+precioMayor6+
                                             ","+precioMayor3+","+precioMenor+",'"+foto+"')";
        System.out.println(call);

        boolean res = false;
        try {
            cstm = stmt.getConnection().prepareCall("{call spc_saveArticulo(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}");
            cstm.setString(1, codigo);
            cstm.setInt(2, marca);
            cstm.setInt(3, tipoPrenda);
            cstm.setInt(4, modelo);
            cstm.setInt(5, tipoTela);
            cstm.setInt(6, genero);
            cstm.setString(7, grupoTallas);
            cstm.setString(8, codigoAlterno);
            cstm.setString(9, descripcion);
            cstm.setFloat(10, precioMayor6);
            cstm.setFloat(11, precioMayor3);
            cstm.setFloat(12, precioMenor);
            cstm.setString(13, foto);

            cstm.executeUpdate();
			res = true;
        } catch (SQLException ex) {
            Logger.getLogger(MngArticulos.class.getName()).log(Level.SEVERE, null, ex);
        }

        return res;
    }

    public Articulo getArticulo(String codigo) {
        Articulo articulo = null;
        String sql;

        sql = " SELECT marc.id AS marcaID, marc.descripcion AS marca, pren.id AS prendaID, pren.descripcion AS tipo_prenda, " +
              " mdl.id AS modeloID, mdl.descripcion AS modelo, tel.id AS telaID, tel.descripcion AS tipo_tela, " +
              " gen.id AS generoID, gen.descripcion AS genero, tal.talla, tal.t01, tal.t02, tal.t03, tal.t04, tal.t05, tal.t06," +
              " tal.t07, tal.t08, tal.t09, tal.t10, art.codigo_alterno, art.descripcion, art.precio_mayor_6, art.precio_mayor_3," +
              " art.precio_menor, art.foto" +
              " FROM articulos art" +
              " INNER JOIN estructura marc ON art.marca = marc.id AND marc.tipo = 'Marca'" +
              " INNER JOIN estructura pren ON art.tipo_prenda = pren.id AND pren.tipo = 'Prenda'" +
              " INNER JOIN estructura mdl ON art.modelo = mdl.id AND mdl.tipo = 'Modelo'" +
              " INNER JOIN estructura tel ON art.tipo_tela = tel.id AND tel.tipo = 'Tela'" +
              " INNER JOIN estructura gen ON art.genero = gen.id AND gen.tipo = 'Genero'" +
              " INNER JOIN tallas tal ON art.grupo_tallas = tal.talla" +
              " WHERE codigo = '" + codigo + "'";
        System.out.println("getArticulo: " + sql);
        try {
            rst = stmt.executeQuery(sql);
            if (rst.next()) {
                articulo = new Articulo();
                articulo.setCodigo(codigo);

                Estructura marca = new Estructura();
                marca.setId(rst.getInt("marcaID"));
                marca.setDescripcion(rst.getString("marca"));
                articulo.setMarca(marca);

                Estructura prenda = new Estructura();
                prenda.setId(rst.getInt("prendaID"));
                prenda.setDescripcion(rst.getString("tipo_prenda"));
                articulo.setTipoPrenda(prenda);

                Estructura modelo = new Estructura();
                modelo.setId(rst.getInt("modeloID"));
                modelo.setDescripcion(rst.getString("modelo"));
                articulo.setModelo(modelo);

                Estructura tela = new Estructura();
                tela.setId(rst.getInt("telaID"));
                tela.setDescripcion(rst.getString("tipo_tela"));
                articulo.setTipoTela(tela);

                Estructura genero = new Estructura();
                genero.setId(rst.getInt("generoID"));
                genero.setDescripcion(rst.getString("genero"));
                articulo.setGenero(genero);

                Talla talla = new Talla();
                talla.setTalla(rst.getString("talla"));
                talla.setT01(rst.getString("t01"));
                talla.setT02(rst.getString("t02"));
                talla.setT03(rst.getString("t03"));
                talla.setT04(rst.getString("t04"));
                talla.setT05(rst.getString("t05"));
                talla.setT06(rst.getString("t06"));
                talla.setT07(rst.getString("t07"));
                talla.setT08(rst.getString("t08"));
                talla.setT09(rst.getString("t09"));
                talla.setT10(rst.getString("t10"));
                articulo.setGrupoTallas(talla);

                articulo.setCodigoAlterno(rst.getString("codigo_alterno"));
                articulo.setDescripcion(rst.getString("descripcion"));
                articulo.setPrecioMayor6(rst.getFloat("precio_mayor_6"));
                articulo.setPrecioMayor3(rst.getFloat("precio_mayor_3"));
                articulo.setPrecioMenor(rst.getFloat("precio_menor"));
                articulo.setFoto(rst.getString("foto"));
            }
        } catch (SQLException ex) {
            Logger.getLogger(MngArticulos.class.getName()).log(Level.SEVERE, null, ex);
        }
        return articulo;
    }

    public boolean deleteArticulo(String codigo) {
        String sql = "DELETE articulos.* FROM articulos WHERE codigo = '" + codigo + "'";

        return execUpdate(sql);
    }

    public static String getTable(boolean report) {
        String sql;
        sql = " SELECT codigo, ";
        if (!report) sql += "IF (CHAR_LENGTH(descripcion) > 25, CONCAT(SUBSTR(descripcion, 1, 25), ' ...'), descripcion) AS ";
        sql += "descripcion," +
              " fillZeros(marca, 4) AS marca, fillZeros(tipo_prenda, 4) AS tipo_prenda, " +
              " fillZeros(modelo, 4) AS modelo, fillZeros(tipo_tela, 4) AS tipo_tela, fillZeros(genero, 4) AS genero, " +
              " grupo_tallas, IF (precio_mayor_6 > 0, precio_mayor_6, '') AS precio_mayor_6, IF (precio_mayor_3 > 0, precio_mayor_3, '') AS precio_mayor_3, " +
              " IF (precio_menor > 0, precio_menor, '') AS precio_menor" +
              " FROM articulos";
        String fields = "codigo,descripcion,marca,tipo_prenda,modelo,tipo_tela,genero,grupo_tallas," +
                        "precio_mayor_6,precio_mayor_3,precio_menor";
        String editFunc = "editArticulo";
        String editFields = "codigo";
        String delFunc = "delArticulo";
        String delFields = "codigo";

        return Table.getTable(sql, fields, editFunc, editFields, delFunc, delFields, report);
    }
}